Skip to main content

Iptables -Netfilter

Output

Un firewall peut se simplifier en se paramétrant uniquement sur les flux d’entrée et donc sur la table FILTER et INPUT. Cependant il est important d’autoriser les flux vers les interface locales en particulier lo (loopback) :

iptables -I INPUT -i lo -j ACCEPT

En s’appuyant sur la table de conntrack (suivi de connexion) il faut aussi penser à autoriser les flux de retour :

iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT

Ainsi les données de retour associé à une connexion sortante seront automatiquement accepté.

Voici les différents endroits (hooks/chaines) où Iptables peut agir :

  • PREROUTING : avant qui rentre avant routage
  • INPUT : paquet arrive localement, destiné au serveur en question
  • FORWARD : paquet qui passe, sans être traité localement
  • OUTPUT : paquet émit localement
  • POSTROUTING : paquet qui sort sur une interface, il est déjà routé.

Il faut distinguer deux tables :

  • la table FILTER, utilisé pour filtrer les paquets, qui agit en INPUT et OUTPUT qu’on a utilisé pour sécurisé notre serveur.
  • la table NAT, utilisée pour modifier des ip source et/ou destination et des ports.

La table NAT a deux usages principaux :

  • le DNAT : modifier les destinateur des paquets : rediriger des ports
  • le SNAT : modifier les sources des paquets : partager une connexion

Commandes iptables et Leurs Descriptions

  1. iptables -L -n -v : Liste les règles iptables.

  2. iptables -L --line-numbers : Affiche les règles avec les numéros de ligne.

  3. iptables -I INPUT 1 -p tcp --dport 8080 -j DROP : Ajoute une règle en première position et décale les autres.

  4. iptables -I INPUT : Ajoute une règle au début de la liste.

  5. iptables -A INPUT : Ajoute une règle à la fin de la liste.

  6. iptables -A INPUT -p tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable : Rejette avec un message celui qui essaie d'accéder, mais le laisse expirer avec drop.

  7. iptables -t nat -F : Supprime les règles de la table nat.

  8. iptables -I INPUT -p tcp --dport 22 -j ACCEPT : Autorise SSH.

  9. iptables -I INPUT -i lo -j ACCEPT : Doit être fait absolument, la machine virtuelle communique avec le monde.

  10. iptables -I INPUT -i lxdbr0 -j ACCEPT : Ajoute une règle si des conteneurs sont présents sur le système.

  11. iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT : Accepte les retours liés à nos paquets envoyés. La table Conntrack suit déjà les paquets. Doit être fait absolument, pour le DNS, etc.

  12. iptables -A INPUT -j DROP : Ferme tous les ports qui ne sont pas dans la table.

  13. iptables -A INPUT -s 192.168.1.3 -j ACCEPT : Accepte les paquets provenant de cette adresse IP.

  14. iptables -I INPUT -p tcp --dport 80 -m iprange --src-range 81.220.48.0-81.220.55.255 -j DROP : Bloque tous les paquets provenant de la plage d'adresses spécifiée.

  15. iptables -P INPUT DROP : Établit une politique, regarde la table, supprime tout sauf ce qui est autorisé.

Note : Si vous avez établi une politique (iptables -P), celle-ci ne sera pas supprimée avec la commande iptables -F !!! Les autres règles seront supprimées et vous ne pourrez pas vous connecter en SSH. Vous devrez redémarrer.

DNAT et SNAT : Redirection et Modification d'Adresses IP

DNAT (Destination NAT) :
Il permet à un périphérique dans un réseau de modifier l'adresse IP de destination des paquets entrants. Cette technique est généralement utilisée par les pare-feu ou les passerelles réseau.

DNAT est souvent utilisé pour rediriger le trafic entrant vers un autre service en modifiant l'adresse IP de destination des paquets. En d'autres termes, il redirige l'adresse IP de destination des paquets entrants vers une autre adresse IP spécifiée.

SNAT (Source NAT) :
Il permet à un périphérique dans un réseau de modifier l'adresse IP source des paquets sortants. Cette technique est généralement utilisée par les dispositifs dans un réseau interne lorsqu'ils communiquent avec le monde extérieur.

SNAT est souvent utilisé pour permettre à un dispositif dans un réseau interne d'agir comme un représentant unique en modifiant son adresse IP source lorsqu'il communique avec le monde extérieur.

Différences :

  • DNAT : Modifie l'adresse IP de destination des paquets entrants.
  • SNAT : Modifie l'adresse IP source des paquets sortants.

Après cette explication théorique, voici des scénarios d'utilisation pratiques pour DNAT et SNAT.

Exemples ;

Exemples de DNAT

  • Redirection de Port :
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination <NOUVELLE-IP>:<NOUVEAU-PORT>

Cet exemple redirige les requêtes HTTP entrantes vers la nouvelle adresse IP et le nouveau port spécifiés.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 1337

Cet exemple redirige les requêtes HTTP entrantes sur le port 80 vers le port 1337.

  • Modification de l'Adresse IP Source :
iptables -t nat -A PREROUTING -s <ANCIENNE-IP> -j DNAT --to-destination <NOUVELLE-IP>

Cet exemple redirige les requêtes HTTP entrantes vers la nouvelle adresse IP et le nouveau port spécifiés.

Exemples de SNAT

  • Modification de l'Adresse IP de Sortie :
iptables -t nat -A POSTROUTING -o <INTERFACE-DE-SORTIE> -j SNAT --to-source <NOUVELLE-IP>

Cet exemple modifie l'adresse IP de sortie du trafic réseau sur l'interface spécifiée.

  • Redirection de Port et Modification de l'Adresse IP Source :
iptables -t nat -A POSTROUTING -s <IP-RESEAU-INTERNE> -p tcp --dport 8080 -j SNAT --to-source <NOUVELLE-IP>:<NOUVEAU-PORT>

Cet exemple redirige les paquets provenant d'une adresse IP source spécifique avec une destination de port 8080, tout en modifiant l'adresse IP source.

iptables-persistent : Rendre les Règles iptables Persistantes

Les règles iptables sont généralement appliquées de manière temporaire et sont perdues après le redémarrage du système. Cependant, le paquet iptables-persistent permet de rendre les règles iptables installées persistantes, assurant ainsi qu'elles ne seront pas perdues après le redémarrage.
Pour installer le paquet iptables-persistent, vous pouvez utiliser la commande suivante :

sudo apt install iptables-persistent

Utilisation :

  • Enregistrer les Règles iptables :
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6

Ces commandes enregistrent les règles iptables existantes dans les fichiers /etc/iptables/rules.v4 (IPv4) et /etc/iptables/rules.v6 (IPv6).

  • Chargement Automatique au Démarrage :
sudo systemctl enable netfilter-persistent
sudo systemctl start netfilter-persistent

Ces commandes activent le service netfilter-persistent pour le chargement automatique des règles iptables au démarrage du système.

  • Charger les Règles iptables manuellement :
sudo iptables-restore < /etc/iptables/rules.v4
sudo ip6tables-restore < /etc/iptables/rules.v6

Ces commandes chargent les règles iptables précédemment enregistrées.
Le paquet iptables-persistent charge automatiquement les règles iptables lors du démarrage du système. Aucune configuration supplémentaire n'est nécessaire pour activer cette fonctionnalité.

Une alternative pour rendre les règles iptables persistantes en utilisant systemd :

sudo netfilter-persistent save  #Enregistre manuellement les règles actuelles.
sudo netfilter-persistent reload #Recharge les règles actuelles.